
// Implement a qsort() template. //实现快速排序的函数模板
#include <iostream>
using namespace std;

template<class T, int size>
void QSort(T arr[size], int L, int R) {
	if (L >= R)				//递归终止条件
		return;
	int i = L, j = R;
	int index = i;				
	while(i<j){
		for (; j > index; j--)
			if (arr[index] > arr[j]) {
				swap(arr[index], arr[j]);
				index = j;
				break;
			}

		for (; i < index; i++)
			if (arr[index] < arr[i]) {
				swap(arr[index], arr[i]);
				index = i;
				break;
			}
	}
	QSort<T, size>(arr, L, index - 1);		//基准数左边部分快排
	QSort<T, size>(arr, index + 1, R);		//基准数右边部分快排
}
int main(int argc, char const *argv[])
{
    int a[5]={2,1,3,5,0};
    int* intP=a;
    char c[5]={'q','w','e','r','t'};

    cout<<"排序后：";
    QSort<int,5>(a,0,4);
    for(int i=0;i<5;i++){
        cout<<a[i]<<' ';
    }

    cout<<endl<<"排序后：";
    QSort<char,5>(c,0,4);
    for(int i=0;i<5;i++){
        cout<<c[i]<<' ';
    }
    return 0;
}
